import json
from flask import Blueprint, jsonify, request
from views.goods import g_blue
from db import db # 导入数据库
from utils.myredis import r






index_blue=Blueprint('index_blue',__name__)


# 获取商家信息进行缓存
# 配置路由
@index_blue.route('/getshops')

def getshops():
    # 读取缓存，如果有直接转换成json字符串进行返回，没有查询数据库
    code='001'
    key="shop"+code   #??????????
    # r调用是调用sql数据库中的数据,获取缓存中的数据
    # 先取出
    shop=r.get_str(key)
    if not shop:
        # 并发访问的时候，只能一个人访问  ?????????????????
        res=r.setnx_str(key+'exit',key+'exit')
        if res:
            print('222')
            # 查询数据库中的所有数据  where 后是条件精准查询 第一
            sql = "select * from shops where code='001'"
            # shop 为结果
            shop = db.find(sql)
            # 把数据库中的数据放在这里进行缓存
            r.set_str(key,json.dumps(shop))
    else:
        # 否则将数据库中的数据转换为json字符串
        shop=json.loads(shop)
        print("shop:",shop)
    return jsonify({'code':200,'shops':shop})



# 获取所有分类接口
@index_blue.route("/getcates") # 默认采用get方法
def getcates():
    # 获取数据库中的cates字段
    # r.remove_str("cates")
    cates=r.get_str("cates")
    if not cates:
        sql="select id,name from category order by sort asc"
        res=db.find_all(sql) #获取排序后所有的数据
        data = [{'id': str(i['id']), 'text': i['name']} for i in res]
        r.set_str('cates',json.dumps(data))
    else:
        res=json.loads(cates)

    # if res:
    #     data=[{'id':i['id'],'name':i['name']} for i in res]
    return jsonify({
        'code':200,
        "catelist":res
    })



# 根据id获取分类下的所有数据

@index_blue.route("/idgetcates") # 默认采用get方法
def idgetcates():
    # 获取数据库中的cates字段
    r.remove_str("cateid")
    cateid=request.args.get("cateid") # 获取分类的id
    goods=r.get_str('goods'+cateid) # 获取缓存中此分类下的商品
    if not goods:
        sql="select id,name,image,price,description from dish where category_id=%d and is_deleted=0"%(int(cateid))
        res=db.find_all(sql) #获取排序后所有的数据

        data=[{'id':str(i['id']),'name':i['name'],'price':float(i['price']),'image':i['image'],'description':i['description']} for i in res]
        r.set_str('goods',json.dumps(data))
    else:
        data=json.loads(goods)

    return jsonify({
        'code':200,
        "catelist":data
    })


